package com.test.processor;

/**
 * 定义了一个接口，允许用户在Spring容器中每个Bean进行初始化之前和之后执行自定义逻辑
 */
public interface BeanPostProcessor {

    /**
     * 在Bean初始化之前执行的方法
     *
     * @param bean 即将被初始化的Bean实例
     * @param beanName Bean的名称
     * @return Object 经过处理的Bean实例，默认返回原始Bean实例
     * @throws Exception 如果处理过程中发生错误，可以抛出异常
     */
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws Exception {
        return bean;
    }

    /**
     * 在Bean初始化之后执行的方法
     *
     * @param bean 已经初始化的Bean实例
     * @param beanName Bean的名称
     * @return Object 经过处理的Bean实例，默认返回原始Bean实例
     * @throws Exception 如果处理过程中发生错误，可以抛出异常
     */
    default Object postProcessAfterInitialization(Object bean, String beanName) throws Exception {
        return bean;
    }
}
